"""
4. 切片的使用

题目：编写一个Python程序，随机生成20个由大小写字母、数字和下划线组成的字符组，并使用字符串、列表、集合和元组的方法打印出来。
对字符串和列表切片，用两种方式取出4-14位的字符。
提示：
    1. 使用random.randint()函数生成随机整数。
    2. 使用random.choice()函数从字符组中随机选择一个字符。
    3. 字符串切片：str[start:end]，列表切片：list[start:end]。
"""

import random
import string


# 随机生成20个由大小写字母、数字和下划线组成的字符组
def generate_char_groups():
    char_groups = []
    for _ in range(20):
        char_group = ""
        # 假设每个字符组长度为15（可自行调整长度）
        for _ in range(15):
            char_group += random.choice(string.ascii_letters + string.digits + "_")
        char_groups.append(char_group)
    return char_groups


# 使用字符串方法打印字符组
def print_strings(char_groups):
    print("使用字符串方法打印：")
    for char_group in char_groups:
        print(char_group)


# 使用列表方法打印字符组
def print_lists(char_groups):
    print("使用列表方法打印：")
    print(char_groups)


# 使用集合方法打印字符组（集合会去重且无序）
def print_sets(char_groups):
    print("使用集合方法打印：")
    char_sets = set(char_groups)
    for char_set in char_sets:
        print(char_set)


# 使用元组方法打印字符组
def print_tuples(char_groups):
    print("使用元组方法打印：")
    char_tuples = tuple(char_groups)
    print(char_tuples)


# 对字符串切片，用两种方式取出4-14位的字符
def slice_strings(char_groups):
    print("对字符串切片取出4-14位字符的两种方式：")
    for char_group in char_groups:
        # 第一种方式：直接使用字符串切片语法
        print(char_group[4:14])
        # 第二种方式：通过循环逐个字符提取拼接
        result = ""
        for index in range(4, 14):
            result += char_group[index]
        print(result)


# 对列表切片，用两种方式取出4-14位的字符
def slice_lists(char_groups):
    print("对列表切片取出4-14位字符的两种方式：")
    for element in char_groups:
        list_element = list(element)
        # 第一种方式：使用列表切片语法
        print("".join(list_element[4:14]))
        # 第二种方式：通过循环逐个字符提取拼接
        sliced_list = []
        for i in range(4, 14):
            sliced_list.append(list_element[i])
        print("".join(sliced_list))


if __name__ == "__main__":
    char_groups = generate_char_groups()
    print_strings(char_groups)
    print_lists(char_groups)
    print_sets(char_groups)
    print_tuples(char_groups)
    slice_strings(char_groups)
    slice_lists(char_groups)

